home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / PINBSRC.ZIP / _SOUND1.PAS < prev    next >
Pascal/Delphi Source File  |  1996-02-02  |  4KB  |  168 lines

  1. { for TABLE1 !!! }
  2.  
  3. procedure init_load_sound;
  4. var poin,poin1:pointer;
  5. begin
  6.   getmem(poin1,1);
  7.   getmem(poin,65536-(Seg(poin1^) Shl 4 + Ofs(poin1^))-8);
  8. end;
  9.  
  10. procedure load_sound(soundnr:byte;soundname:string);
  11. var f:file;
  12.     error:word;
  13.     poin:pointer;
  14. begin
  15.   Assign(f,soundname);
  16.   {$I-}
  17.   Reset(f,1);
  18.   {$I+}
  19.   getmem(poin,1);
  20.   if 65536-(Seg(poin^) Shl 4 + Ofs(poin^))<Filesize(f) then
  21.   begin
  22.     getmem(poin,65536-((Seg(poin^) Shl 4 + Ofs(poin^))));
  23.     getmem(sounds[soundnr],filesize(f));
  24.   end else
  25.   begin
  26.    freemem(poin,1);
  27.    getmem(sounds[soundnr],filesize(f));
  28.   end;
  29.   blockread(f,sounds[soundnr]^,filesize(f),error);
  30.   soundlength[soundnr]:=filesize(f);
  31.   close(f);
  32. end;
  33.  
  34. procedure play(soundnr:byte);
  35. begin
  36.   if not UseSound then exit;
  37.   dmastop;
  38.   playback(sounds[soundnr],soundlength[soundnr],19000);
  39. end;
  40.  
  41.  Const dsp_adr    : word = $220;
  42.    dsp_irq        : byte = $5;
  43.    SbRegDetected : BOOLEAN = FALSE;
  44.  
  45.  var SbVersMaj : byte;
  46.      SbVersMin : byte;
  47.      SbVersStr : string[5];
  48.  
  49.  function Reset_sb : boolean;
  50.  const ready = $AA;
  51.  var   ct, stat : BYTE;
  52.  BEGIN
  53.   port [ dsp_adr+ $6 ]  :=  1 ;
  54.         for ct :=1 to 100 do;
  55.  
  56.      port [ dsp_adr+ $6 ]  :=  0 ;
  57.      stat := 0;
  58.      ct   := 0;
  59.      while (stat <> ready)
  60.      and   (ct < 100)   do begin
  61.        stat := PORT[dsp_adr+$E];
  62.        stat := PORT[dsp_adr+$a];
  63.        inc(ct);
  64.   end ;
  65.      Reset_sb := (stat = ready);
  66.   end;
  67.  
  68.  
  69.  
  70.  
  71.  function Detect_Reg_sb : boolean;
  72.  VAR Port, Lst : word;
  73.  BEGIN
  74.   Detect_Reg_sb :=  SbRegDetected;
  75.   IF SbRegDetected THEN EXIT;
  76.   Port := $210;
  77.   Lst  := $280;
  78.  
  79.   while (not SbRegDetected)
  80.   and   (Port <= Lst)  do begin
  81.     dsp_adr := Port;
  82.     SbRegDetected := Reset_sb;
  83.     if not SbRegDetected then
  84.  
  85.      inc(Port, $10);
  86.   end ;
  87.      Detect_Reg_sb := SbRegDetected;
  88.  end;
  89.  
  90.  function SbReadByte : byte;
  91.  begin;
  92.    while port[dsp_adr+$a] = $AA do ;
  93.    SbReadByte :=  port[dsp_adr+$a];
  94.  end;
  95.  
  96.  
  97.  procedure wr_dsp(v : byte);
  98.  begin;
  99.   while port[dsp_adr+$c] >= 128 do ;
  100.    port[dsp_adr+$c] :=  v;
  101.  end;
  102.  
  103.  
  104.  function GetDSPVersion : string;
  105.  var i : word;
  106.      t : WORD;
  107.      s :  STRING [ 2 ] ;
  108.   begin
  109.    wr_dsp($E1);
  110.    SbVersMaj :=  SbReadByte;
  111.    sbVersMin :=  SbReadByte;
  112.    str(SbVersMaj, SbVersStr);
  113.    SbVersStr :=  SbVersStr +  '.';
  114.    str(SbVersMin, s);
  115.    if SbVersMin > 9 then
  116.      SbVersStr :=  SbVersStr +   s
  117.    else
  118.      SbVersStr :=  SbVersStr + '0' + s;
  119.    GetDSPVersion := SbVersStr;
  120.  end;
  121.  
  122.  function wrt_dsp_adr : string;
  123.  begin;
  124.    case dsp_adr of
  125.     $210 : begin wrt_dsp_adr := '210'; dsp_adr := 1; end;
  126.     $220 : begin wrt_dsp_adr := '220'; dsp_adr := 2; end;
  127.     $230 : begin wrt_dsp_adr := '230'; dsp_adr := 3; end;
  128.     $240 : begin wrt_dsp_adr := '240'; dsp_adr := 4; end;
  129.     $250 : begin wrt_dsp_adr := '250'; dsp_adr := 5; end;
  130.     $260 : begin wrt_dsp_adr := '260'; dsp_adr := 6; end;
  131.     $270 : begin wrt_dsp_adr := '270'; dsp_adr := 7; end;
  132.     $280 : begin wrt_dsp_adr := '280'; dsp_adr := 8; end;
  133.     END ;
  134.  end;
  135.  
  136. procedure detect_soundblaster;
  137. begin
  138.   UseSound := False;
  139.   if detect_reg_sb then begin
  140.         writeln('SoundBlaster ',GetDSPVersion,' at base Address ',
  141.                 wrt_dsp_adr,'h found.');
  142.             UseSound := true;
  143.     end else begin
  144.       writeln('No Soundblaster or compatible found!');
  145.       UseSound := false;
  146.     end;
  147. end;
  148.  
  149. procedure init_soundkit;
  150. var h : byte;
  151. begin
  152.   init_load_sound;
  153.           load_sound(snd1,'sound\1.snd');
  154.           load_sound(snd2,'sound\2.snd');
  155.           load_sound(snd3,'sound\3.snd');
  156.           load_sound(snd4,'sound\4.snd');
  157.           load_sound(snd5,'sound\5.snd');
  158.           load_sound(snd6,'sound\6.snd');
  159.           load_sound(snd7,'sound\7.snd');
  160.           load_sound(snd8,'sound\8.snd');
  161.   if resetDSP(dsp_Adr) then
  162.   begin
  163.     writeln('RESET FAILED');
  164.   end;
  165.   h := SBReadByte;
  166.   h := SpeakerOn;
  167.  
  168. end;